// Promise 对象的构造器（constructor）
let promise01 = new Promise(function (resolve, reject) {
  // 当 promise 被构造完成时，自动执行此函数
  console.info("executor")
  // 1 秒后发出工作已经被完成的信号，并带有结果 "done"
  setTimeout(() => resolve("done"), 1000);
});
                                                                                                                                                                                                                                                                                   

// executor 以 error 拒绝 promise
// let promise02 = new Promise(function (resolve, reject) {
//   // 3 秒后发出工作已经被完成的信号，并带有 error
//   setTimeout(() =>  reject(new Error("…")), 3000);
// });

// executor 只能调用一个 resolve 或一个 reject
// let promise03 = new Promise(function (resolve, reject) {
//   resolve("done");
//   reject(new Error("…")); // 被忽略
//   setTimeout(() => resolve("…")); // 被忽略
// });


//then
// let promise04 = new Promise(function(resolve, reject) {
//   setTimeout(() => resolve("done!"), 1000);
// });
// promise04.then(
//   result => console.info(result), // 1 秒后显示 "done!"
//   error => console.info(error) // 不运行
// );


//如果我们只对成功完成的情况感兴趣，那么我们可以只为 .then 提供一个函数参数
// let promise05 = new Promise(resolve => {
//   setTimeout(() => resolve("done!"), 1000);
// });
// promise05.then(console.info); // 1 秒后显示 "done!"


//如果我们只对 error 感兴趣，那么我们可以使用 null 作为第一个参数：.then(null, errorHandlingFunction)。或者我们也可以使用 .catch(errorHandlingFunction)
// let promise = new Promise((resolve, reject) => {
//   setTimeout(() => reject(new Error("Whoops!")), 1000);
// });
// // .catch(f) 与 promise.then(null, f) 一样
// promise.catch(console.info); // 1 秒后显示 "Error: Whoops!"


//清理：finally
// new Promise((resolve, reject) => {
//   setTimeout(() => resolve("value"), 2000)
// })
//   .finally(() => console.info("Promise ready")) // 先触发
//   .then(result => console.info(result)); // <-- .then 显示 "value"